#include<iostream>
#include<unordered_map>
using namespace std;
const int N=1e5+10;
int fa[N*2];

struct node
{
	int x,y,e;
}a[N];

unordered_map<int,int> um;
int find(int pos)
{
	return fa[pos]==pos?pos:fa[pos]=find(fa[pos]);
}

void un(int x,int y)
{
	fa[find(x)]=find(y);
}

bool issame(int x,int y)
{
	return find(x)==find(y);
}

bool isfalse(int n,int ret)
{
	for(int i=0;i<ret;i++)
	{
		fa[i]=i;
	}

	for(int i=0;i<n;i++)
	{
		if(a[i].e) un(um[a[i].x],um[a[i].y]);
	}

	for(int i=0;i<n;i++)
	{
		if(a[i].e==0) 
			if(issame(um[a[i].x],um[a[i].y]))
				return false;
	}

	return true;
}

int main()
{
	int t;cin>>t;

	while(t--)
	{
		um.clear();

		int n;cin>>n;
		int ret=0;

		for(int i=0;i<n;i++)
		{
			cin>>a[i].x>>a[i].y>>a[i].e;

			if(!um.count(a[i].x))
				um[a[i].x]=ret++;
			if(!um.count(a[i].y))
				um[a[i].y]=ret++;
		}

		if(isfalse(n,ret))
		{
			cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}
	}
}